extern uint8_t RusFont2[];
extern uint8_t BigFont[];


UTFT myGLCD(ILI9325D_8,A5,A4,A3,A2);

// 1 голова
extern unsigned int head[0x2BC];
// 2 шея
extern unsigned int neck[0x110];
// 4 спина
extern unsigned int body[0xE10];
// 5 рука
extern unsigned int hands[0x21A2];
// 6 нога
extern unsigned int foots[0x136C];
// 7 стопа
extern unsigned int pes[0x174];
//логотип
extern unsigned int logo[0x2710];

int red[3] = {255, 100, 100}; //красный
int blue[3] ={100, 100, 250}; //синий
int gray[3] ={0x55, 0x55, 0x55};// серый



//======================== Инициализация дисплея ============================
void displayInit(){
  myGLCD.InitLCD(LANDSCAPE); //инициализируем экран
  width = myGLCD.getDisplayXSize(); //узнаем ширину экрана
  height = myGLCD.getDisplayYSize(); //узнаем высоту экрана
}

//======================== отрисвка логотипа ============================
void showLogo(){
  myGLCD.clrScr();
  myGLCD.drawBitmap (10, 10, 100, 100, logo); //рисуем логотип
  myGLCD.setColor(255,255,0);
  myGLCD.setFont(RusFont2);
  myGLCD.print(getName(100),120,10);
}

void showInitMesage(int num, boolean mode){
  myGLCD.setColor(255,255,255);
  myGLCD.print(getName(num+1),120,vertPos); //пишем имя датчика
  if(mode){
    myGLCD.setColor(0,255,0);
    myGLCD.print(getName(101),190,vertPos);
  } else {
    myGLCD.setColor(255,0,0);
    myGLCD.print(getName(102),190,vertPos);
  }
  vertPos+=17;
}

//======================== отрисвка кнопок ============================
void showButtons(){
  myGLCD.clrScr();
  //myGLCD.drawBitmap (1, 20, 55, 105, m2, 2);

  myGLCD.setColor(red[0],red[1],red[2]);
  myGLCD.fillRect(width-p, 0, width-1, p); // температура +0.1
  myGLCD.fillRect(width-p, p+5, width-1, p*2+5);  // температура +1

  myGLCD.setColor(255,255,0);
  myGLCD.fillRect(width-p, height/2-p/2, width-1, height/2+p/2);  // температура равна текущей

  myGLCD.setColor(blue[0],blue[1],blue[2]);
  myGLCD.fillRect(width-p, height, width-1, height-p);  // температура -1
  myGLCD.fillRect(width-p, height - p-5, width-1, height - p*2-5);  // температура -0.1
  
}

int calculateDelta(int num){
  if(elements[num][4]>elements[num][3]+elements[num][6]) return 1;
  else if (elements[num][4]<elements[num][3]-elements[num][6]) return -1;
  return 0;
}

//======================== Рисуем человечка ============================
void buildHuman (){
  int posX = 0;
  int posY = 0;
  if(!elements[0][1])myGLCD.setColor(gray[0], gray[1], gray[2]);
  else setColorD(calculateDelta(0), red, blue);
  myGLCD.drawBitmapOpacity (posX+31, posY, 25, 28, head,1); //голова
  
  if(!elements[1][1])myGLCD.setColor(gray[0], gray[1], gray[2]);
  else setColorD(calculateDelta(1), red, blue);
  myGLCD.drawBitmapOpacity (posX+35, posY+25, 17, 16, neck,1); // шея
  
  if(!elements[2][1])myGLCD.setColor(gray[0], gray[1], gray[2]);
  else setColorD(calculateDelta(2), red, blue);
  myGLCD.drawBitmapOpacity (posX+20, posY+34, 48, 75, body, 1); //тело
  
  if(!elements[4][1])myGLCD.setColor(gray[0], gray[1], gray[2]);
  else setColorD(calculateDelta(4), red, blue);
  myGLCD.drawBitmapOpacity (posX+4, posY+41, 82, 105, hands,1);//руки
  
  if(!elements[5][1])myGLCD.setColor(gray[0], gray[1], gray[2]);
  else setColorD(calculateDelta(5), red, blue);
  myGLCD.drawBitmapOpacity (posX+22, posY+107, 44, 113, foots,1);//ноги
  
  if(!elements[6][1])myGLCD.setColor(gray[0], gray[1], gray[2]);
  else setColorD(calculateDelta(6), red, blue);
  myGLCD.drawBitmapOpacity (posX+29, posY+219, 31, 12, pes,1);//стопы
}

//======================== устанавливаем цвет по условию ============================
void setColorD(float val, int col1[], int col2[]){
  if(val>0) myGLCD.setColor(col1[0],col1[1],col1[2]);
  else if(val<0) myGLCD.setColor(col2[0],col2[1],col2[2]);
  else myGLCD.setColor(255,255,255);
}

//======================== устанавливаем фон по условию ============================
void setBgColorD(float val, int col1[], int col2[]){
  if(val>0) myGLCD.setBackColor(col1[0],col1[1],col1[2]);
  else if(val<0) myGLCD.setBackColor(col2[0],col2[1],col2[2]);
  else myGLCD.setBackColor(255,255,255);
}

//======================== получаем имя по номеру ============================
char* getName(int num){
  switch(num){
  case 1: 
    return "Cnknb`";  //Голова
  case 2: 
    return "Cnpkn";   //Горло
  case 3: 
    return "Cpsd|";   //Грудь
  case 4: 
    return "Qohm`";   //Спина
  case 5: 
    return "Psjh";    //Руки
  case 6: 
    return "Mnch";    //Ноги
  case 7: 
    return "Qrno{";   //Стопы
  case 100:
    return "Opnbepj` d`rwhjnb";   //Проверка датчиков
  case 101:
    return "Eqr|";   //Есть
  case 102:
    return "Mer";   //Нет
  }    
}

//======================== рисуем строку ============================
void buildEl(int num){
  if(!elements[num][1])return; //если датчик не активен пропускаем
  float current = elements[num][4]/100.00; //текущая температура
  float last = elements[num][5]/100.00;    //последняя температура
  float needed = elements[num][3]/100.00;  //необходимая температура
  float limit = elements[num][6]/100.00;  //температура допустимого отклонения

  if(selected == elements[num][0]){        //если выбран этот датчик делаем серый фон
    myGLCD.setColor(gray[0], gray[1], gray[2]);
    myGLCD.setBackColor(gray[0], gray[1], gray[2]);

    myGLCD.fillRect(95, vertPos-2, width-p-10,vertPos+interval-4); //рисуем подложку
    //обозначаем элемент корый меняем
    myGLCD.setColor(0,255,0);
    if(setDelta){
      myGLCD.drawLine(270, vertPos+11, 270,vertPos+20);
      myGLCD.drawLine(262, vertPos+15, 270,vertPos+20);
      myGLCD.drawLine(262, vertPos+15, 270,vertPos+11);
    } else {
      myGLCD.drawLine(270, vertPos+1, 270,vertPos+10);
      myGLCD.drawLine(262, vertPos+5, 270,vertPos+10);
      myGLCD.drawLine(262, vertPos+5, 270,vertPos+1);
    }
    myGLCD.setBackColor(gray[0], gray[1], gray[2]);
  }
  else{
    myGLCD.setColor(0, 0, 0);             //иначе черный фон
    myGLCD.setBackColor(0, 0, 0);
    myGLCD.fillRect(95, vertPos-2, width-p-10,vertPos+interval-4); //рисуем подложку
  }

  int delta = 0;
  if(current>needed+limit) delta = 1;
  else if (current<needed-limit) delta = -1;

  setColorD(delta, red, blue);   //цвет в зависимости от текущая-нужная
  myGLCD.setFont(RusFont2);
  myGLCD.print(getName(num+1),100,vertPos+5); //пишем имя датчика
  myGLCD.printNumF(needed, 1, 230, vertPos-1);//пишем необходимую

  setColorD(0, red, blue); 
  myGLCD.printNumF(limit, 1, 230, vertPos+9);  //пишем температуру допустимого отклонения
  //setColorD(current-last, red, blue);     //цвет в зависимости от текущая-последняя
  //myGLCD.printNumF(current-last, 2, 230, vertPos+9);  //пишем разницу текущая-последняя
  myGLCD.setFont(BigFont);
  setColorD(delta, red, blue); //цвет в зависимости от текущая-нужная
  myGLCD.printNumF(current,1, 155, vertPos+1);//пишем текущую
  vertPos+=interval;                    //увеличиваем вертикальну позицию
}

//======================== убираем все записи ============================
void clearTexts(){ 
  myGLCD.setColor(0, 0, 0);             
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.fillRect(95, vertPos, width-p-10, height);
}